import rclpy
from rclpy.node import Node

from autopatrol_interfaces.srv import SpeechText #从功能包导入服务接口

import espeakng
"""2025-0109 at1223
这段代码主要创建了一个名为 Speaker 的 ROS 2 节点，该节点提供了一个名为 speech_text 的服务。
当客户端请求这个服务并传入要朗读的文本内容时，节点会调用语音合成功能将文本转换为语音进行朗读，并返回服务调用成功的响应给客户端。
这段代码利用 ROS 2 的服务机制结合语音合成库 espeakng 实现了一个简单的语音播报服务功能，
"""
class Speaker(Node):
    def __init__(self, node_name):
        super().__init__(node_name)
        self.speech_service_ = self.create_service(SpeechText, 'speech_text', self.speak_text_callback) #接口名，服务名字
        self.speaker_ = espeakng.Speaker()
        self.speaker_.voice = 'zh'
        self.get_logger().info(f"SpeechText服务请求类型: {SpeechText.Request}")
        # 打印SpeechText服务接口的响应类型信息
        self.get_logger().info(f"SpeechText服务响应类型: {SpeechText.Response}")
        #self.speaker_.say('123')
        #self.speaker_.wait()
   


    #回调函数
    def speak_text_callback(self, request, response):
        self.get_logger().info(f'正朗读{request.text}')
        self.speaker_.say(request.text)
        self.speaker_.wait()
        response.result = True
        return response
    

def main(args=None):
    rclpy.init()
    node = Speaker('speaker')
    rclpy.spin(node)
    sclpy.shutdown()

        
